#include <stdio.h>
#include <stdlib.h>

#define MaxSize 10

typedef struct
{
    int data[MaxSize];
    int front, rear; //队头指针指向头元素，队尾指针指向队尾元素的后一个元素
} SqQueue;

void InitQueue(SqQueue &Q)
{
    Q.front = Q.rear = 0;
}

bool isEmpty(SqQueue Q)
{
    return Q.front == Q.rear;
    /*
    由于上面这句话是队列的判空条件,
    但若此时数据中只有一个位置空着，此时队头和队尾指针指向相邻的两个地方，若还要继续插入元素
    那么队头和队尾指针将指向同一个位置，所以要牺牲一个位置
    */
}

//入队
bool EnQueue(SqQueue &Q, int x)
{
    //判断是否满队
    if ((Q.rear + 1) % MaxSize == Q.front)
    {
        return false;
    }

    Q.data[Q.rear] = x;
    Q.rear = (Q.rear + 1) % MaxSize;
    /*
    取余的理解：
    当队尾指针指向MaxSize是，且队头位置出队了若干元素，则此时队未满，队尾指针还可以指向前面，空的地方
    可以用循环链表来理解
    */
    return true;
}

//出队
bool DeQueue(SqQueue &Q, int &x)
{
    if (Q.front == Q.rear) //判空
    {
        return false;
    }
    x = Q.data[Q.front];
    Q.front = (Q.front + 1) % MaxSize;
    return true;
}




int main()
{
    printf("\n\n========================================================================\n\n");

    printf("\n\n========================================================================\n\n");
    return 0;
}